$.ajax({
    url:constUrl+"HostGroupList",
    type:'post',
    dataType:'json',
    data:{
        method: "getAllGroup"
    },
    success: function(responseText) {
        if (responseText.result=="success"){
            var group ='';
            for(var i=0;i<responseText.message.length;i++){
                group+='<option value="'+(responseText.message[i].GROUP_NAME)+'" >'+responseText.message[i].GROUP_NAME+'</option>'
            }
            $("#nodeGroup").append(group);
        }
    },
    complete: function() {
    },
    error: function() {
    }
});

$.ajax({
    url:constUrl+"GpuServlet",
    type:'post',
    dataType:'json',
    data:{
        method: "getAllGpu"
    },
    success: function(responseText) {
        if (responseText.result=="success"){
            var gpu ='';
            for(var i=0;i<responseText.message.length;i++){
                gpu+='<option value="'+(responseText.message[i].gpuId)+'" >'+responseText.message[i].gpuVersion+'</option>'
            }
            $("#gpu").append(gpu);
            $("#gpu").select2({placeholder: '请选择计算节点！'});
        }
    },
    complete: function() {
    },
    error: function() {
    }
});

//验证表单
$(document).ready(function() {
    $("#check_name_div").hide();
    $("#check_ip_div").hide();
    $("#check_node_group_div").hide();
    $("#check_gpu_div").hide();

    $("#name").blur(function () {
        var Name = $("#name").val();
        if (Name !== "") {
            $("#ip").focus();
            $("#check_name_div").hide();
            $("#name").css("border-color", "#1ece20");
        } else {
            $("#name").css("border-color", "red");
            $("#check_name_div").css("color", "red")
            $("#check_name_div").show();
        }
    });

    $("#ip").blur(function () {
        var ip = $("#ip").val();
        if (ip !== "") {
            $("#node_group").focus();
            $("#ip").css("background-color", "white");
            $("#ip").css("border-color", "#1ece20");
            $("#check_ip_div").hide();
        } else {
            $("#ip").css("border-color", "red");
            $("#ip").css("color", "red");
            $("#check_ip_div").show();
        }
    });

    $("#node_group").blur(function () {
        var node_group = $("#node_group").val();
        if (node_group !== "" && node_group !== null) {
            $("#check_node_group_div").hide();
            $("#node_group").css("border-color", "#1ece20");
        } else {
            $("#node_group").css("border-color", "red");
            $("#check_node_group_div").css("color", "red")
            $("#check_node_group_div").show();
        }
    });

    $("#gpu").blur(function () {
        var gpu = $("#gpu").val();
        if (gpu !== "" && gpu !== null) {
            $("#check_gpu_div").hide();
            $("#gpu").css("border-color", "#1ece20");
        } else {
            $("#gpu").css("border-color", "red");
            $("#check_gpu_div").css("color", "red")
            $("#check_gpu_div").show();
        }
    });
});

//验证准备
//输入验证器
function InputValidators(){
    this.validators = [];
    this.strategies = {};
}

//添加验证方法
//参数:
//  rule: 验证策略字符串
//  element: 被验证的dom元素
//  errMsg: 验证失败时显示的提示信息
//  value: 被验证的值
InputValidators.prototype.addValidator = function(rule, element, errMsg, value) {
    var that = this;
    var ruleElements = rule.split(":");

    this.validators.push(function() {
        var strategy = ruleElements.shift();
        var params = ruleElements;
        params.unshift(value);
        params.unshift(errMsg);
        params.unshift(element);

        return that.strategies[strategy].apply(that, params);
    });
};

//添加验证策略函数
//参数:
//  name: 策略名称
//  strategy: 策略函数
InputValidators.prototype.addValidationStrategy = function(name, strategy){
    this.strategies[name] = strategy;
};

//从策略对象导入验证策略函数
//参数:
//  strategies: 包含各种策略函数的对象
InputValidators.prototype.importStrategies = function(strategies) {
    for(var strategyName in strategies) {
        this.addValidationStrategy(strategyName, strategies[strategyName]);
    }
};

//验证失败时，将相关的错误信息打包返回
//参数:
//  element: dom元素
//   errMsg: 验证失败时的提示消息
//    value: 被验证的值
InputValidators.prototype.buildInvalidObj = function(element, errMsg, value){
    return {
        'value': value,
        'element': element,
        'errMsg': errMsg
    };
};

//开始验证
InputValidators.prototype.check = function() {
    for(var i = 0, validator; validator = this.validators[i++];){
        var result = validator();
        if(result) {
            return result;
        }
    }
};

//验证策略对象，包含默认的验证策略函数
var validationStrategies = {
    isNoEmpty: function(element, errMsg, value) {
        if(value === '') {
            return this.buildInvalidObj(element, errMsg, value );
        }
    },
    isNoUndefined: function(element, errMsg, value) {
        if(value === "undefined") {
            return this.buildInvalidObj(element, errMsg, value );
        }
    },
    isInteger:function (element, errMsg, value) {
        var reg = /^[0-9]*[1-9][0-9]*$/ ;
        if(!reg.test(value)){
            return this.buildInvalidObj(element, errMsg, value);
        }
    },
    isRight:function (element, errMsg, value) {
        if(value>100){
            return this.buildInvalidObj(element, errMsg, value);
        }
    },
    isNotEmpty:function (element, errMsg, value) {
        var fdstrat = value.indexOf(".");
        if(fdstrat==-1||value.length<=1){
            return this.buildInvalidObj(element, errMsg, value);
        }
    },
    isCheck:function (element, errMsg, value) {
        var isValue="";
        for(var i=0;i<value.length;i++)
        {
            if(value[i].checked)
            {
                isValue=value[i].value;
                break;
            }
            else
            {
                continue;
            }
        }

        if(isValue==""){
            return this.buildInvalidObj(element, errMsg, value);
        }
    },
    minLength: function(element, errMsg, value, length) {
        if(value.length < length){
            return this.buildInvalidObj(element, errMsg, value);
        }
    },

    maxLength: function(element, errMsg, value, length) {
        if(value.length > length){
            return this.buildInvalidObj(element, errMsg, value);
        }
    },

    isMail: function(element, errMsg, value, length) {
        var reg = /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/;
        if(!reg.test(value)){
            return this.buildInvalidObj(element, errMsg, value);
        }
    }
};


var isSubmit = false
function submit() {
    if(!isSubmit){
        isSubmit = true;
        var name = $("#name").val();
        var ip = $("#ip").val();
        var node_group = $("#node_group").val();
        var gpu = $("#gpu").val();

        //进行验证
        var validators = new  InputValidators();

        validators.importStrategies(validationStrategies);

        validators.addValidationStrategy('isEqual',  function(element, errMsg, value1, value2) {
            if(value1 !== value2) {
                return this.buildInvalidObj(element, errMsg, value1 );
            }
        });

        var Vname = document.getElementById('name');
        validators.addValidator('isNoEmpty', Vname, '节点主机名未填写，请返回填写', Vname.value);

        var Vip = document.getElementById('ip');
        validators.addValidator('isNoEmpty', Vip, '主机IP未填写，请返回填写', Vip.value);

        var Vnode_group = document.getElementById('node_group');
        validators.addValidator('isNoEmpty', Vnode_group, '节点分组未选择，请返回选择', Vnode_group.value);

        var Vgpu = document.getElementById('gpu');
        validators.addValidator('isNoEmpty', Vgpu, 'GPU未选择，请返回选择', Vgpu.value);

        var result = validators.check();
        if(result){
            layer.msg(result.errMsg);
            // alert(result.errMsg);
            result.element.focus();
            result.element.select();
            return false;
        }

        $.ajax({
            type:"POST",
            url:constUrl+"conf/hosts.action",
            data: $('#hostAndGroup').serializeArray(),
            /*url:constUrl+"NodeServlet",
            data: {
                method : "addNode",
                nodeName : name,
                nodeIp : ip,
                gpuId : gpu,
                groupName : node_group
            },*/
            dataType: "json",
            success:function(responseText){
                if(responseText.result=="success")
                {
                    layer.confirm('添加成功！',{
                        btn:['确定']
                    },function () {
                     window.location.href=constUrl +"views/node/list.action";//   CreateQueryString('nodeList.html');
                    })
                }
                else{
                    layer.msg(responseText.message+",请检查是否填写完全！");
                }

            },
            error:function(responseText) {
                isSubmit = false;
                layer.msg('添加失败！!');
            },
        })
    }
}